/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Interaction;

/**
 *
 * @author fhaerer
 * @author Stefan Fellner
 */
import Flightadministration.Flightadministration;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RemoteException;
import java.util.logging.Level;
import java.util.logging.Logger;

/**
 * Aufbauene einer Verbindung zum Flugmanagement Server.
 *
 * @author Stefan Fellner
 */
public class ServerConnection {

    /**
     * Referenz auf das zugehörige administrations-Objekt
     * Anhand der Static deklaration wird eine singleton Eigenschaft erzeugt. Es kann somit nur ein Objekt und somit eine Verbidnung
     * erzeugt werden. Überprüfung siehe Methode @see getConnection()
     */
    private static Flightadministration administration = null;

    /**

     * Es wird zuerst Überprüft ob bereits ein administrationsObjekt angelegt wurde. Wenn nicht wird es neu angelegt. Ansonsten
     * wird direkt das vorhandene administrationsObjekt zurückgegeben.
     *
     * Naming.lookup verbindet sich mithilfe von RMI zu dem ausgewähltem Server und sieht in der Registry nach dem
     * Eintrag "Flightadministration" im welchem der Server das administrationsObjekt bereitstellt.
     *
     * @return Flightadministration, ein Objekt das die Verbindungsdaten zur Administration enthält
     * @exception NotBoundException
     * @exception MalformedURLException
     * @exception RemoteException
     */
    public static Flightadministration getConnection() {
        if (administration == null) {

            try {
                administration = (Flightadministration) Naming.lookup("rmi://localhost:1099/Flightadministration");
                System.out.println("Verbindung zum Server aufgebaut");

            } catch (NotBoundException ex) {
                ex.printStackTrace();
            } catch (MalformedURLException ex) {
                ex.printStackTrace();
            } catch (RemoteException ex) {
                ex.printStackTrace();
            }


        }
        return administration;
    }
}
